import 'dart:io';

import 'package:dynamic_color/dynamic_color.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_demo/conf/app_themes.dart';
import 'package:flutter_demo/pages/home.dart';
import 'package:flutter_localizations/flutter_localizations.dart';

import '../generated/l10n.dart';

///应用类，主要进行一些全局状态初始化、主题样式设置等
class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return _getThemeApp(HomePage());
  }

  ///获取带主题效果的App组件，在其下的所有组件将受主题影响携带默认样式
  /// - [home] app启动时加载的页面
  /// - [usePlatformTheme] 使用平台主题，可以选择ios于与android采用不同的主题，当然最好是
  /// 都使用Material主题，因为Flutter的设计团队是是Google，他们对Material扩展了很多组件，
  /// 而Cupertino组件较少，一般开发时建议选择Material
  ///   - ios原生平台的设计采用Cupertino
  ///   - android原生平台的设计采用Material
  Widget _getThemeApp(Widget home, {bool usePlatformTheme = false}) {
    if (usePlatformTheme && Platform.isIOS) {
      return CupertinoApp(
        home: home,
        debugShowCheckedModeBanner: false,
      );
    } else {
      //动态颜色，Material支持App跟随系统主题配色，这里使用第三方库dynamic_color
      //仅在Android 12+ 和 iOS 16+ 上生效，旧系统会回退到静态颜色方案。
      return DynamicColorBuilder(
        builder: (lightDynamic, darkDynamic) {
          ThemeData lightTheme ;
          ThemeData darkTheme ;
          // 动态颜色方案surface及其变种颜色是一样的，这就导致了在背景上添加的Card之类的组件
          // 是完全一样的背景，体验很不好。
          
          // 获取系统动态颜色（如果可用）
          // if (lightDynamic != null && darkDynamic != null) {
          //   lightTheme = ThemeData(
          //     colorScheme:lightDynamic,
          //     textTheme: textTheme,
          //   );
          //   darkTheme = ThemeData(
          //     brightness: Brightness.dark,
          //     colorScheme:darkDynamic,
          //     textTheme: textTheme,
          //   );
          // }else{
            //不支持动态主题，则使用我们app预设的主题
            lightTheme = AppThemeWithCustomColor.light;
            darkTheme = AppThemeWithCustomColor.dark;
          // }
          return MaterialApp(
            //设置加载的首页，如果需要启动页可以在这里指定
            home: home,
            //调试模式下在屏幕右上角显示debug角标，默认启用，很碍眼
            debugShowCheckedModeBanner: false,
            //主题设置，可设置项非常多，分得也很细致，这里以常见的Material主题为例
            theme: lightTheme,
            darkTheme: darkTheme,
            //国际化语言代理配置
            localizationsDelegates: const [
              S.delegate, //项目的本地化代理，S是Flutter Intl插件自动生成的代理类，请不要修改它
              GlobalWidgetsLocalizations.delegate, //widget库的本地化代理
              GlobalMaterialLocalizations.delegate, //material组件的本地化代理
              GlobalCupertinoLocalizations.delegate, //cupertino组件的本地化代理
            ],
            //已经支持的地区列表
            supportedLocales: S.delegate.supportedLocales,
            //根据系统语言自动选择Locale，如果不想跟随系统，可以通过这个方法返回应用内设置的语言
            localeResolutionCallback: (locale, supportedLocales) {
              //地区由语言码+国家码构成，在没有匹配的国家选项时，我们可以返回一个其它国家的同类型语言
              //例如中文没有繁体时，可以返回简体
              for (var supportedLocale in supportedLocales) {
                if (supportedLocale.languageCode == locale?.languageCode) {
                  return supportedLocale;
                }
              }
              // return supportedLocales.first; // 默认返回第一个支持的语言
              return const Locale("zh", "CN"); // 找不到目标语言时，强制使用简体中文
            },
          );
        },
      );
    }
  }
}
